C语言不能代表a[1]地址的是

来源:百度知道 编辑:UC知道 时间:2024/06/29 21:08:20
48. int a[10],*p=a;
不能代表a[1]地址的是( )
A. p+1 B. a+1
C. ++a D. ++p

请详解下 不胜感激
还有一道
麻烦各位了
49. int a[4][5],(*p)[5];
p=a;
下列对数组a 数组元素正确的引用形式是( )
A. p+1 B. *(p+3) C. p[0][2] D. *(p+1)+3

选C
a为数组名,代表的是数组a的首地址,是一个固定不变的量,不能执行"++"操作
A项,p指向a[0],所以p+1指向a[1];
B项,同理,a指向a[0],a+1就指向a[1];
D项,表达式"++p"的值是p+1之后的值,所以也指向a[1];

首先,你要明白“*”是取数据的意思,所以这里的P代表地址,a是数组名,而且数组是从a[0]到a[9]的,总共是10个。
其次,数组名是不能有“+”的运算的,只能是移动或者指针传递~
所以选B。

A:p+1,就是p指向的地址+1,指向a[1]没问题。
B:p和a的地址是一样的,同A
C:这句话就是错误的,数组名是常量,是不能更改的。
D:同A,自加1指向a[1].

C
数组名被定义为常量,是不能作为左值的。
http://topic.csdn.net/u/20080615/19/8cdda1e1-8265-4cea-a030-e310a7435af6.html
LZ可以看看这个链接,下面评论我觉得很有用。

第二题,也是c,p是指向一个有5个元素的数组,是个二维指针,需要两次解引用

选 C

++x x 必须为变量 此时a为数组名 已为常量 故C是错的